package br.edu.fa7.receita.persistencia;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import br.edu.fa7.receita.model.Receita;

public class ReceitaDAO {
	
	private SQLiteDatabase db;
	private SQLiteHelper dbHelper;

	public ReceitaDAO(Context ctx) {
		dbHelper = new SQLiteHelper(ctx, "receita", 1);
	}

	public long inserir(Receita receita) {
		
		db = dbHelper.getWritableDatabase();
		
		ContentValues cv = new ContentValues();
		cv.put("titulo", receita.getTitulo());
		cv.put("descricao", receita.getDescricao());
		cv.put("urlImage", receita.getUrlImage());
		cv.put("usuarioId", receita.getUsuarioId());
		
		long id = db.insert("receitas", null, cv);
		db.close();
		return id;
	}

	public long atualizar(Receita receita) {
		
		ContentValues cv = new ContentValues();
		cv.put("titulo", receita.getTitulo());
		cv.put("descricao", receita.getDescricao());
		cv.put("urlImage", receita.getUrlImage());
		cv.put("usuarioId", receita.getUsuarioId());

		db = dbHelper.getWritableDatabase();
		long rows = db.update("receitas", cv, "_id = ?", new String[] { String.valueOf(receita.getId()) });
		db.close();
		return rows; // qtde. de linhas afetadas
	}

	public int excluir(Receita receita) {
		db = dbHelper.getWritableDatabase();
		int rows = db.delete("receitas", "_id = ?", new String[] { String.valueOf(receita.getId()) });
		return rows; // qtde. de linhas afetadas
	}

	public List<Receita> buscarReceitasPorTitulo(String nome) {

		List<Receita> lista = new ArrayList<Receita>();

		String[] columns = new String[] { "_id", "titulo", "descricao", "urlImage", "usuarioId" };

		String[] args = new String[] { nome + "%" };

		db = dbHelper.getWritableDatabase();

		Cursor c = db.query("receitas", columns, "titulo like ?", args, null, null, "titulo");

		c.moveToFirst();

		while (!c.isAfterLast()) {
			Receita receita = fillReceita(c);
			lista.add(receita);
			c.moveToNext();
		}

		c.close();
		db.close();
		return lista;

	}

	public List<Receita> buscarReceitasUsuario(int usuarioId) {	

		List<Receita> lista = new ArrayList<Receita>();

		String[] columns = new String[] { "_id", "titulo", "descricao", "urlImage", "usuarioId" };

		String[] args = new String[] { "" + usuarioId };
		
		db =  dbHelper.getWritableDatabase();

		Cursor c = db.query("receitas", columns, "usuarioId = ?", args, null, null, "titulo");

		c.moveToFirst();

		while (!c.isAfterLast()) {
			Receita receita = fillReceita(c);
			lista.add(receita);
			c.moveToNext();
		}

		c.close();
		db.close();
		return lista;

	}

	public List<Receita> buscarReceitasOutrosUsuarios(int usuarioId) {

		List<Receita> lista = new ArrayList<Receita>();

		String[] columns = new String[] { "_id", "titulo", "descricao", "urlImage", "usuarioId" };

		String[] args = new String[] { "" + usuarioId };

		db = dbHelper.getWritableDatabase();

		Cursor c = db.query("receitas", columns, "usuarioId != ?", args, null, null, "titulo");

		c.moveToFirst();

		while (!c.isAfterLast()) {
			Receita receita = fillReceita(c);
			lista.add(receita);
			c.moveToNext();
		}

		c.close();
		db.close();
		return lista;

	}

	private Receita fillReceita(Cursor cursor) {
		Receita receita = new Receita();
		receita.setId((int) cursor.getLong(0));
		receita.setTitulo(cursor.getString(1));
		receita.setDescricao(cursor.getString(2));
		receita.setUrlImage(cursor.getString(3));
		receita.setUsuarioId(cursor.getInt(4));
		return receita;
	}

}